<?php

/**
 * Classe contruída para efetuar análise de performance do framework e do sistema
 * @author cristiano
 *
 */
class Velocimetro {
	private $metodos = array();
	private $relatorio;
	private static $instancia;

	/**
	 * Gerencia instancia singleton do objeto
	 * 
	 * @return Velocimetro
	 */
	public static function GetInstancia(){
		if(!self::$instancia){
			self::$instancia = new Velocimetro();
		}
		return self::$instancia;
	}

	public function Start($nome){
		$this->metodos[$nome] = array(microtime());
	}

	public function End($nome){
		if(isset($this->metodos[$nome])){
			$this->metodos[$nome][] = microtime();
		}else{
			die("Erro: O método End() do Velocímetro só pode ser invocado para finalizar uma sessão ja aberto.<br /> Sessão não finalizada: <b>{$nome}</b>");
		}
	}

	public function SetRelatorio(){
		$versao = FRAMEWORK_VERSION;

		$table = "<table cellpadding='0' cellspacing='0' style='border: 1px solid #333;'><tr><td colspan='2'><span style='font-weight: bold; color: #555;'>SofiaPHP</span> <span style='font-size: 11px; color: #990000;'>Versão: {$versao}</span></td></tr>";

		$linhas = '<tr ><td style="background-color: #990000; color: #fff; text-align: center; font-weight: bold; width: 250px;">Método</td><td style="background-color: #990000; color: #fff; text-align: center; font-weight: bold; width: 250px;">Tempo Decorrido (milesegundos)</td></tr>';

		foreach($this->metodos as $metodo => $medicao){
			$total_time = $medicao[1] - $medicao[0];
			$total_date = round(($total_time / 1000), 10);//date("s:u", $total_time);

			$linhas .= "<tr style=''><td style='border-bottom: 1px solid #333;border-right: 1px solid #333; width: 250px;'>$metodo</td><td style='border-bottom: 1px solid #333; width: 250px;'>$total_date</td></tr>";
		}

		$table .= $linhas . "</table>";

		return addslashes($table);
	}

	public function GetRelatorio(){
		return $this->SetRelatorio();
	}
}